win32: Stop accessing GdkDrag members
authorMatthias Clasen <mclasen@redhat.com>
Sun, 15 Jul 2018 20:58:22 +0000 (16:58 -0400)
committerMatthias Clasen <mclasen@redhat.com>
Sun, 15 Jul 2018 20:58:22 +0000 (16:58 -0400)
gdk/win32/gdkdrag-win32.c

index 86413f8c1150b0d1d0beb25144da57b80f309e7c..5af63041240bb50887c09f50be5e3a7872b7588d 100644 (file)
@@ -785,6 +785,7 @@ gdk_win32_drag_finalize (GObject *object)
 
 static GdkDrag *
 gdk_drag_new (GdkDisplay         *display,
+              GdkSurface         *surface,
               GdkContentProvider *content,
               GdkDragAction       actions,
               GdkDevice          *device,
@@ -797,6 +798,8 @@ gdk_drag_new (GdkDisplay         *display,
   drag_win32 = g_object_new (GDK_TYPE_WIN32_DRAG,
                              "device", device,
                              "content", content,
+                             "surface", surface,
+                             "actions", actions,
                              NULL);
 
   drag = GDK_DRAG (drag_win32);
@@ -806,7 +809,6 @@ gdk_drag_new (GdkDisplay         *display,
   else
     drag_win32->scale = _gdk_win32_display_get_monitor_scale_factor (win32_display, NULL, NULL, NULL);
 
-  gdk_drag_set_actions (drag, actions);
   drag_win32->protocol = protocol;
 
   return drag;
@@ -1590,19 +1592,24 @@ source_context_new (GdkDrag           *drag,
 {
   GdkWin32Drag *drag_win32;
   source_drag_context *result;
+  GdkSurface *surface;
 
   drag_win32 = GDK_WIN32_DRAG (drag);
 
+  g_object_get (drag, "surface", &surface, NULL);
+
   result = g_new0 (source_drag_context, 1);
   result->drag = g_object_ref (drag);
   result->ids.lpVtbl = &ids_vtbl;
   result->idsn.lpVtbl = &idsn_vtbl;
   result->ref_count = 1;
-  result->source_window_handle = GDK_SURFACE_HWND (drag->source_surface);
+  result->source_window_handle = GDK_SURFACE_HWND (surface);
   result->scale = drag_win32->scale;
   result->util_data.state = GDK_WIN32_DND_PENDING; /* Implicit */
   result->dest_window_handle = INVALID_HANDLE_VALUE;
 
+  g_object_unref (surface);
+
   GDK_NOTE (DND, g_print ("source_context_new: %p (drag %p)\n", result, result->drag));
 
   return result;
@@ -1715,14 +1722,13 @@ _gdk_win32_surface_drag_begin (GdkSurface         *surface,
   g_return_val_if_fail (surface != NULL, NULL);
 
   drag = gdk_drag_new (gdk_surface_get_display (surface),
+                       surface,
                        content,
                        actions,
                        device,
                        use_ole2_dnd ? GDK_DRAG_PROTO_OLE2 : GDK_DRAG_PROTO_LOCAL);
   drag_win32 = GDK_WIN32_DRAG (drag);
 
-  g_set_object (&drag->source_surface, surface);
-
   GDK_NOTE (DND, g_print ("_gdk_win32_surface_drag_begin\n"));
 
   gdk_device_get_position (device, &x_root, &y_root);